Prevod carky na tecku u vkladani desetinneho cisla do SQL dotazu pomoci Delphi

Otázka od: little_bobes@centrum.cz

26. 4. 2004 12:55

         pomoci Delphi
Zdravim,

v Delphi si vytvarim SQL dotaz, ktery si posilam na FB 1.5.
SQL dotaz vytvarim zhruba takto:
  dotaz := format('update TABULKA set HODNOTA = %f where ID = %d',
[T1.Fields[0].AsFloat, T2.Fields[0].AsInteger]);

Stale jsem nemohl prijit na to, proc se mi parametr AsFloat vklada do dotazu
s desetinnou carkou (coz zpusobovalo chybu SQL), kdyz se mi ve Watch Listu
zobrazuje s desetinnou teckou.
Po delsim case jsem zjistil, ze je to nastavenim narodniho prostredi v
ovladacich panelech Windows.

Musel jsem si proto udelat funkci na prevod z Float na String, nahradit
pripadnou carku za tecku a vysledny retezec vlozit do dotazu:
  dotaz := format('update TABULKA set HODNOTA = %s where ID = %d',
[PrevodNaTecku(T1.Fields[0].AsFloat), T2.Fields[0].AsInteger]);

Nyni se ptam, zda jsem nahodou nezapomnel na nejaky jiny zpusob, jak vlozit
Float do SQL tak, aby se vlozil vzdy s teckou.
Nebo se, prosim, podelte o to, jakym zpusobem toto resite vy.

Diky Bob
(D4 c/s, FB 1.5)




Odpovedá: Jiri Foldyna

26. 4. 2004 12:36

         pomoci Delphi
> v Delphi si vytvarim SQL dotaz, ktery si posilam na FB 1.5.
> SQL dotaz vytvarim zhruba takto:
> dotaz := format('update TABULKA set HODNOTA = %f where ID = %d',
> [T1.Fields[0].AsFloat, T2.Fields[0].AsInteger]);
>
> Stale jsem nemohl prijit na to, proc se mi parametr AsFloat
> vklada do dotazu
> s desetinnou carkou (coz zpusobovalo chybu SQL), kdyz se mi
> ve Watch Listu
> zobrazuje s desetinnou teckou.
> Po delsim case jsem zjistil, ze je to nastavenim narodniho prostredi v
> ovladacich panelech Windows.
>
> Musel jsem si proto udelat funkci na prevod z Float na
> String, nahradit
> pripadnou carku za tecku a vysledny retezec vlozit do dotazu:
> dotaz := format('update TABULKA set HODNOTA = %s where ID = %d',
> [PrevodNaTecku(T1.Fields[0].AsFloat), T2.Fields[0].AsInteger]);
>
> Nyni se ptam, zda jsem nahodou nezapomnel na nejaky jiny
> zpusob, jak vlozit
> Float do SQL tak, aby se vlozil vzdy s teckou.
> Nebo se, prosim, podelte o to, jakym zpusobem toto resite vy.

Ahoj,

zkus neco jako

TmpDecSep : char;

...
TmpDecSep := DecimalSeparator; // odlozit DecimalSeparator
DecimalSeparator := '.'; // nastavit tecku
// tady formatuj dotaz
dotaz := format('update TABULKA set HODNOTA = %f where ID = %d',
[T1.Fields[0].AsFloat, T2.Fields[0].AsInteger]);
...
DecimalSeparator := TmpDecSep; // vratit DecimalSeparator
...

Zdravim

Jiri Foldyna
mailto:jiri.f@avizo.cz


Odpovedá: petr palicka

26. 4. 2004 12:30

         pomoci Delphi
Ahoj,

   nastav si promennou DecimalSeparator na '.'.

var
   ds: Char;
...
begin
...
   ds:=DecimalSeparator;
   DecimalSeparator:='.';
...
   DecimalSeparator:=ds;
...
end;


Peca